第1关
创建一张简单的学生表
写 SQL · 10分
创建学生信息表 student,包含 sno(CHAR(10) NOT NULL)、sname(VARCHAR(30))、age(INT)。
✅ 参考答案
CREATE TABLE student (
sno CHAR(10) NOT NULL,
sname VARCHAR(30),
age INT
);
评分要点:必须包含 CREATE TABLE student、sno CHAR(10) NOT NULL、sname VARCHAR(30)、age INT。字段顺序不要求,大小写不敏感。
第2关
选择合适的数据类型
选择题 · 10分
要存储商品价格(如 99.50 元),需要精确到分,应该用哪个数据类型?
DECIMAL 是精确数值类型,不会出现浮点误差,算钱必须用它。FLOAT 是近似值,会出现 0.1+0.2≠0.3 的问题。INT 没有小数,VARCHAR 是字符串,都不合适。
第3关
补全 NOT NULL 约束
填空题 · 10分
创建员工表 employee,要求 ename 不能为空。在横线处填入正确的关键字。
✅ 正确答案
CREATE TABLE employee (
eid INT,
ename VARCHAR(50) NOT NULL,
salary DECIMAL(10,2)
);
NOT NULL 约束表示该字段不允许为空值,插入数据时必须提供值。
第4关
PRIMARY KEY 的特点
选择题 · 10分
关于主键(PRIMARY KEY),以下哪个说法是正确的?
✅ 正确答案
CPRIMARY KEY = NOT NULL + UNIQUE
主键 = 不能为空 + 不能重复。
❌ A:一张表只能有一个主键。
❌ B:主键绝对不允许 NULL。
❌ D:主键可以用于任何类型(CHAR、VARCHAR、INT 等),不限于 INT。
第5关
创建带主键的课程表
写 SQL · 10分
创建课程表 course,cno 为主键,cname 不能为空。
✅ 参考答案
CREATE TABLE course (
cno CHAR(10) NOT NULL PRIMARY KEY,
cname VARCHAR(50) NOT NULL,
credit INT
);
评分要点:必须有 PRIMARY KEY 修饰 cno。写成列约束(如上)或表约束 PRIMARY KEY (cno) 均可。cname 必须有 NOT NULL。
第6关
添加 UNIQUE 约束
填空题 · 10分
用户表 users 中,邮箱 email 不能重复。填入正确的约束关键字。
✅ 正确答案
CREATE TABLE users (
uid INT PRIMARY KEY,
email VARCHAR(100) UNIQUE,
name VARCHAR(50)
);
UNIQUE 约束保证该列的值在整张表中不重复。与 PRIMARY KEY 的区别:一张表可以有多个 UNIQUE,且 UNIQUE 允许 NULL。
第7关
外键的作用
选择题 · 10分
在 sc 中插入一个学生表里不存在的学号,会发生什么?
外键的核心作用是保证引用完整性——从表中引用的值必须在主表中真实存在,否则数据库会直接拒绝插入操作。
第8关
创建带外键的选课表
写 SQL · 10分
创建选课表 sc,sno+cno 联合主键,分别引用 s 表和 c 表的外键。
✅ 参考答案
CREATE TABLE sc (
sno CHAR(10) NOT NULL,
cno CHAR(10) NOT NULL,
score DECIMAL(5,2),
PRIMARY KEY (sno, cno),
FOREIGN KEY (sno) REFERENCES s(sno),
FOREIGN KEY (cno) REFERENCES c(cno)
);
评分要点:
① 必须有 PRIMARY KEY (sno, cno) 联合主键。
② 必须有两条 FOREIGN KEY ... REFERENCES 语句。
③ sno、cno 的类型必须与被引用表的主键类型一致(CHAR(10))。
第9关
用 CHECK 限制取值范围
填空题 · 10分
成绩 score 只允许 0~100 之间的值,补全 CHECK 约束。
✅ 正确答案
CREATE TABLE exam (
sid CHAR(10) NOT NULL,
score DECIMAL(5,2) CHECK(score>=0 AND score<=100),
PRIMARY KEY (sid)
);
CHECK(条件) 约束限制字段的取值范围。也可以写成 CHECK(score BETWEEN 0 AND 100),效果相同。空格和 = 的位置可灵活调整。
第10关·终极
综合判断:找出所有正确的说法
多选题 · 10分
以下关于 MySQL 建表和约束的说法,哪些是正确的?
✅ 正确选项(共3个)
A. UNIQUE 列允许有多个 NULL 值
C. FOREIGN KEY 引用的必须是主表的主键或 UNIQUE 字段
E. VARCHAR 比 CHAR 更节省空间(长度不固定时)
逐项分析:
✅ A:MySQL 中 NULL ≠ NULL,所以 UNIQUE 列可以有多个 NULL,不算重复。
❌ B:一张表只能有一个 PRIMARY KEY(但可以是联合主键)。
✅ C:外键引用的目标必须是主表的主键或 UNIQUE 列,否则无法建立引用。
❌ D:CHECK 不仅可以用于数字,也可以用于字符串等类型,如 CHECK(sex IN ('男','女'))。
✅ E:VARCHAR 按实际内容长度存储,对于长度不固定的数据比 CHAR 省空间。
❌ F:AUTO_INCREMENT 只能用于整数类型(如 INT、BIGINT),不能用于 VARCHAR。